﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;
using BarcodeLib;

namespace WypożyczalniaV1
{
    public partial class Dodaj_Czytelnika : Form
    {
        /* ------------------------------------------------------------------------------
         * W tej formie można dodawać oraz edytować Dane o Czetelniku
         * 
         *
         -------------------------------------------------------------------------------*/
        public Dodaj_Czytelnika(string conf)
        {
            configuracja = conf;
            InitializeComponent();
            button3.Visible = false;
        }

        #region Zmienne globalne

        public string configuracja;
        private Zapytania zapytania;
        public int identyfikator;
        private string Ean8;
        #endregion
        private void textBox4_TextChanged(object sender, EventArgs e)
        {
           
        }
        private void Dodaj_Czytelnika_Load(object sender, EventArgs e)
        {
            groupBox2.Visible = false;
            zapytania = new Zapytania(configuracja);
        }
        #region Przyciski
        #region Przycisk pierwszy dodaj i czyści pola
        private void button1_Click(object sender, EventArgs e)
        {           
                if (walidator() == true)
                {
                    try
                    {
                        opcja(0);
                        DialogResult dial = MessageBox.Show("Dodano do Bazy\nCzy chcesz wydrukować kartę czytelnika", "Pytanie", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (DialogResult.Yes == dial)
                        {
                            Print formaDruku = new Print(configuracja);
                            formaDruku.opcjaDruku(1, Ean8);
                            formaDruku.Show();
                    }

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
                else
                {
                    MessageBox.Show("Popraw pola zaznaczone na kolor Czerwony", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }     
        }
        #endregion
        #region Przycisk drugi dodaje i zamyka okno
        private void button2_Click(object sender, EventArgs e)
        {
            if (walidator() == true)
            {
                try
                {
                    opcja(1);
                    DialogResult dial = MessageBox.Show("Dodano do Bazy\nCzy chcesz wydrukować kartę czytelnika", "Pytanie", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (DialogResult.Yes == dial)
                    {
                        Print formaDruku = new Print(configuracja);
                        formaDruku.opcjaDruku(1, Ean8);
                        formaDruku.Show();
                }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            else
            {
                MessageBox.Show("Popraw pola zaznaczone na kolor Czerwony", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        #endregion
        #region Przycisk trzeci zapisuje edytowane dane
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {

                DateTime data = Convert.ToDateTime(dateTimePicker1.Value.ToShortDateString());
                string query_update = "UPDATE czytelnicy SET Imie='" + textBox1.Text + "',Nazwisko='" + textBox2.Text + "',PESEL='" + textBox3.Text + "', kodPocztowy='" + maskedTextBox3.Text + "',Miejscowsc='" + textBox5.Text + "', AdressKrp='" + textBox6.Text + "', numertel='" + maskedTextBox1.Text + "', email='" + textBox7.Text + "', DataUrodzenia='" + data + "' WHERE idCzytelnicy =" + identyfikator + ";";
                zapytania.Dodaj_pozycje(query_update);
                DialogResult dial = MessageBox.Show("Z aktualizowano dane\nCzy chcesz wydrukować nową kartę czytelnika", "Pytanie", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (DialogResult.Yes == dial)
                {
                    Print formaDruku = new Print(configuracja);
                    formaDruku.opcjaDruku(1, Ean8);
                    formaDruku.Show();
                }
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        #endregion
        #endregion
        #region Właściowość polu radiobutoon
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true)
            {
                groupBox2.Visible = false;
            }
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked == true)
            {
                groupBox2.Visible = true;
            }
        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            maskedTextBox1.Clear();
            if(radioButton3.Checked == true)
            {
                maskedTextBox1.Mask = "999-999-999";
            }
        }

        private void radioButton4_CheckedChanged(object sender, EventArgs e)
        {
            maskedTextBox1.Clear();
            if (radioButton4.Checked == true)
            {
                maskedTextBox1.Mask = "(99) 999-99-99";
            }
        }
        #endregion
        #region Zmiana koloru pol jeżeli były źle wprowadzone
        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            textBox3.BackColor = Color.White;
        }

        private void textBox7_TextChanged(object sender, EventArgs e)
        {
            textBox7.BackColor = Color.White;
        }
        #endregion
        #region Edycja
        public void edycja(int id)
        {
            identyfikator = id;
            string query = "SELECT * FROM czytelnicy WHERE idCzytelnicy='" + id + "';";
            MySqlConnection conn = new MySqlConnection(configuracja);
            MySqlCommand cmd = new MySqlCommand(query, conn);
            conn.Open();
            MySqlDataReader czytaj = cmd.ExecuteReader();
            if (czytaj.Read())
            {
                textBox1.Text = czytaj[1].ToString();
                textBox2.Text = czytaj[2].ToString();
                textBox3.Text = czytaj[3].ToString();
                DateTime days = Convert.ToDateTime(czytaj[4].ToString());
                dateTimePicker1.Value = days;
                maskedTextBox3.Text = czytaj[5].ToString();
                textBox5.Text = czytaj[6].ToString();
                textBox6.Text = czytaj[7].ToString();
                textBox7.Text = czytaj[9].ToString();
                maskedTextBox1.Text = czytaj[8].ToString();
                Ean8 = czytaj[11].ToString();
                if (czytaj[10] == null)
                {
                    radioButton2.Checked = true;
                }

                button1.Visible = false;
                button2.Visible = false;
                button3.Visible = true;
            }
        }
        #endregion
        #region Dodaj czytelnika
        public void opcja(int p)
        {
            DateTime date = Convert.ToDateTime(dateTimePicker1.Value.ToShortDateString());
            Ean8 = Gen_Ean8();
            string zapytanie_A = "INSERT INTO czytelnicy (Imie, Nazwisko,PESEL, kodPocztowy, Miejscowsc, AdressKrp, numertel, email, DataUrodzenia, KodEan8) VALUES('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + maskedTextBox3.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + maskedTextBox1.Text + "','" + textBox7.Text + "','" + date + "','" + Ean8 +"');";
            string zapytanie_B = "INSERT INTO czytelnicy (Imie, Nazwisko,PESEL, kodPocztowy, Miejscowsc, AdressKrp, numertel, email, PESELOpiekuna, DataUrodzenia) VALUES('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + maskedTextBox3.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + maskedTextBox1.Text + "','" + textBox7.Text + "','" + textBox9.Text + "','" + date + "');";
            switch (p)
            {
                case 1:
                    {
                        if (radioButton1.Checked == true)
                        {
                            zapytania.Dodaj_pozycje(zapytanie_A);
                        }
                        if (radioButton2.Checked == true)
                        {
                            zapytania.Dodaj_pozycje(zapytanie_B);
                        }

                        break;
                    }
                case 0:
                    {
                        if (radioButton1.Checked == true)
                        {
                            zapytania.Dodaj_pozycje(zapytanie_A);

                        }
                        if (radioButton2.Checked == true)
                        {
                            zapytania.Dodaj_pozycje(zapytanie_B);
                        }
                        textBox1.Clear();
                        textBox2.Clear();
                        textBox3.Clear();
                        maskedTextBox1.Clear();
                        textBox5.Clear();
                        textBox6.Clear();
                        textBox7.Clear();
                        dateTimePicker1.Text = string.Empty;
                        maskedTextBox3.Clear();

                        break;
                    }
            }
        }
        #endregion
        #region Walidacja danychwejsciowych
        private bool CheckPesel(string _dane)
        {
            int[] tab = {1,3,7,9,1,3,7,9,1,3};
            int suma = 0;
            for (int i = 0; i < 9; i++)
            {
                suma = tab[i] * int.Parse(_dane[i].ToString());
            }
            suma %= 10;
            suma = 10 - suma;
            suma %= 10;
            //MessageBox.Show(suma.ToString());
            if (suma == int.Parse(_dane[10].ToString()))
            {
                return true;
            }
            else
            {
                return false;
            }

          

        }
        private bool CheckTextBox()
        {
            if (textBox1.Text == "" && textBox2.Text == "" && textBox3.Text == "")
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        private bool walidator()
        {
            bool flaga_sprawdzania_pola;
            string text = textBox7.Text;
            flaga_sprawdzania_pola = CheckTextBox();
            if (text.Contains("@") && text.Contains("."))
            {
                flaga_sprawdzania_pola = true;   
            }
            else
            {
                textBox7.BackColor = Color.Red;
                // MessageBox.Show("Popraw adres e-mail", "BŁĄD", MessageBoxButtons.OK, MessageBoxIcon.Information); 
                flaga_sprawdzania_pola = false;
            }
            try
            {
                long.Parse(textBox3.Text);
                if (false == CheckPesel(textBox3.Text))
                {
                    
                        flaga_sprawdzania_pola = true;
                    }
                    else
                    {
                        textBox3.BackColor = Color.Red;
                    flaga_sprawdzania_pola = false;
                }
            }
            catch
            {
                
            }
            return flaga_sprawdzania_pola;

        }
        #endregion

        #region Generowanie kodu ean8 dla czytelnika

        private string Gen_Ean8()
        {

            string kodEan8 = zapytania.Ean8_czytelnicy();
            long part = long.Parse(kodEan8.Substring(0, 7));
            part++;
            string new_kodPart = part.ToString();
            //MessageBox.Show(new_kodPart);

            /*
             * Cześć kodu odpowiedzialna za wygenerowanie sumy kontrolnej 
             */

            int[] tab = { 3, 1, 3, 1, 3, 1, 3 };
            int suma = 0;
            string suma_kontrolna;
            for (int i = 0; i < 7; i++)
            {
                suma += int.Parse(new_kodPart[i].ToString()) * tab[i];
            }
            //MessageBox.Show(suma.ToString());

            suma %= 10;
            suma = 10 - suma;
            suma %= 10;
            suma_kontrolna = suma.ToString();
            //MessageBox.Show(suma_kontrolna);

            kodEan8 = null;
            kodEan8 = new_kodPart + suma_kontrolna;
            //MessageBox.Show(kodEan8);

            return kodEan8;
        }

        #endregion




        

  
        
    }
}
